home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / taropyon / hewin / ccisrc / expcfg.cci < prev    next >
Text File  |  1993-11-30  |  8KB  |  251 lines

  1.  
  2. int        _expSetup_maxibuf ( int    maxibuf  )
  3. {
  4.     int        ret, i;
  5.     char    *dlg;
  6.     char    buf[16];
  7.  
  8.     dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  9.                         "-maxibuf 1~64 (%d)", maxibuf );
  10.     DLG_getsSetTitle( dlg, "MAXIBUF" );
  11.     buf[0] = '\0';
  12.     ret = DLG_getsStart( dlg, 15, buf );
  13.     if ( ret > 0 )
  14.     {    i = atoi(buf);
  15.         if ( i > 0 && i <= 64 )
  16.             maxibuf = i;
  17.     }
  18.     DLG_getsClose(dlg);
  19.     return (maxibuf);
  20. }
  21.  
  22. int        _expSetup_nistack ( int    nistack  )
  23. {
  24.     int        ret, i;
  25.     char    *dlg;
  26.     char    buf[16];
  27.  
  28.     dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  29.                         "-nistack 1~16 (%d)", nistack );
  30.     DLG_getsSetTitle( dlg, "NISTACK" );
  31.     buf[0] = '\0';
  32.     ret = DLG_getsStart( dlg, 15, buf );
  33.     if ( ret > 0 )
  34.     {    i = atoi(buf);
  35.         if ( i > 0 && i <= 16 )
  36.             nistack = i;
  37.     }
  38.     DLG_getsClose(dlg);
  39.     return (nistack);
  40. }
  41.  
  42. int        _expSetup_istksize ( int    istksize  )
  43. {
  44.     int        ret, i;
  45.     char    *dlg;
  46.     char    buf[16];
  47.  
  48.     dlg = DLG_getsOpen( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, 320,
  49.                         "-istksize 1~8 (%d)", istksize );
  50.     DLG_getsSetTitle( dlg, "ISTKSIZE" );
  51.     buf[0] = '\0';
  52.     ret = DLG_getsStart( dlg, 15, buf );
  53.     if ( ret > 0 )
  54.     {    i = atoi(buf);
  55.         if ( i > 0 && i <= 8 )
  56.             istksize = i;
  57.     }
  58.     DLG_getsClose(dlg);
  59.     return (istksize);
  60. }
  61.  
  62.  
  63.  
  64. int        _expSetup_sub( char *obj, int maxibuf, int nistack, int istksize )
  65. {
  66.     MNU_setObj(obj, 0, MNU_DIG, 'M', "-maxibuf  %d"             , maxibuf &0xFFFF, 1, NULL, NULL );
  67.     MNU_setObj(obj, 1, MNU_DIG, 'K', "-nistack  %d"             , nistack &0xFFFF, 2, NULL, NULL );
  68.     MNU_setObj(obj, 2, MNU_DIG, 'I', "-istksize %d"             , istksize&0xFFFF, 3, NULL, NULL );
  69.     MNU_setObj(obj, 3, MNU_BLK,  0 ,  NULL                      , NULL   , 0, NULL, NULL );
  70.     MNU_setObj(obj, 4, MNU_NOR, 'D', " Danger   ちょっと危ない" , NULL   , 4, NULL, NULL );
  71.     MNU_setObj(obj, 5, MNU_NOR, 'N', " Normal   僕は通信しない" , NULL   , 5, NULL, NULL );
  72.     MNU_setObj(obj, 6, MNU_NOR, 'S', " Standard 標準設定"       , NULL   , 6, NULL, NULL );
  73.     MNU_setObj(obj, 7, MNU_NOR, 'B', " Bgm      BGM はガンガン" , NULL   , 7, NULL, NULL );
  74.     MNU_setObj(obj, 8, MNU_NOR, 'A', " Safety   安全設定"       , NULL   , 8, NULL, NULL );
  75.     MNU_setObj(obj, 9, MNU_BLK,  0 ,  NULL                      , NULL   , 0, NULL, NULL );
  76.     MNU_setObj(obj,10, MNU_NOR, 'W', " Write  設定書込"         , NULL   , 9, NULL, NULL );
  77. }
  78.  
  79. int        CCI_expSetup(int argc, char **argv )
  80. {
  81.     char            *fp;
  82.     char            fn[128], buf[32];
  83.     char            *fdl;
  84.     char            *dlg;
  85.     char            *obj;
  86.     char            *mnu;
  87.     int                ret;
  88.     unsigned short    chk_sum, sum;
  89.     unsigned short        maxibuf,     nistack,     istksize;
  90.     unsigned short    old_maxibuf, old_nistack, old_istksize;
  91.     unsigned int    dx_ofs;
  92.     long            ofs;
  93.  
  94.     if ( (fdl = FDL_open(0)) == NULL )
  95.         return (1);
  96.     FDL_set_title( fdl, "EXP プログラムの環境設定");
  97.     FDL_set_wildcard( fdl, "*.exp");
  98.     ret = FDL_start(fdl);
  99.     if ( ret == NORMAL )
  100.         strcpy( fn, FDL_get_filename(fdl));
  101.     FDL_close(fdl);
  102.     if ( ret != NORMAL || strlen(fn) == 0 )
  103.         return (1);
  104.     if ( (fp = FM_fopen(fn,"rb")) == NULL )
  105.     {
  106.         DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  107.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
  108.             AplErrMsgTime, " %s : \n    FILE OPEN ERROR!!    ", fn );
  109.         return (1);
  110.     }
  111.     dlg = DLG_msgOpen( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  112.         6*48,12*14, C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
  113.         "EXP HEADER INFORMATION");
  114.     if ( dlg == NULL )
  115.         return (ERR);
  116.     DLG_msgSetConfig( dlg, 4, 6, 12 );
  117.     DLG_msgClear( dlg, C_HWHITE );
  118.  
  119.     DLG_msgPrintf(dlg,"FILE : %s\r\n", fn );
  120.     DLG_msgPrintf(dlg,"\tcheck header" );
  121.     fseek( fp, 0, SEEK_SET);
  122.     fread( buf, 2, 1, fp );
  123.     if ( buf[0] != 'P' || buf[1] != '3' )
  124.     {
  125.         DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  126.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
  127.             AplErrMsgTime, " %s : \n    P3形式のプログラムではありません。 ", fn );
  128.         DLG_msgClose(dlg);
  129.         return (1);
  130.     }
  131.     DLG_msgPrintf(dlg,"\tOk!!\r\n" );
  132.  
  133.     /* チェックサム読み取り    */
  134.     fseek(fp,0x0A,SEEK_SET);
  135.     fread( &chk_sum, 2, 1, fp );
  136.     DLG_msgPrintf(dlg,"\tcheck sum\t\t$%04X\r\n", chk_sum & 0xFFFF );
  137.  
  138.     /* DX部オフセット読み取り    */
  139.     fseek( fp, 0x0C, SEEK_SET);
  140.     fread( &dx_ofs, 4, 1, fp );
  141.     DLG_msgPrintf(dlg,"\tDX part offset\t$%08X\r\n", dx_ofs );
  142.  
  143.     /* -maxibuf */
  144.     ofs = dx_ofs + 0x08;
  145.     fseek(fp,ofs,SEEK_SET);
  146.     fread( &maxibuf, 2, 1, fp );
  147.     DLG_msgPrintf(dlg,"\t-maxibuf\t%d\r\n", maxibuf );
  148.  
  149.     /* -nistack */
  150.     ofs = dx_ofs + 0x0A;
  151.     fseek(fp,ofs,SEEK_SET);
  152.     fread( &nistack, 2, 1, fp );
  153.     DLG_msgPrintf(dlg,"\t-nistack\t%d\r\n", nistack );
  154.  
  155.     /* -istksize */
  156.     ofs = dx_ofs + 0x0C;
  157.     fseek(fp,ofs,SEEK_SET);
  158.     fread( &istksize, 2, 1, fp );
  159.     DLG_msgPrintf(dlg,"\t-istksize\t%d\r\n", istksize );
  160.  
  161.     FM_fclose(fp);
  162.     DLG_msgPrintf(dlg,"file close\r\n" );
  163.  
  164.     old_maxibuf  = maxibuf ;
  165.     old_nistack  = nistack ;
  166.     old_istksize = istksize;
  167.  
  168.     obj = MNU_alloc( 11 );
  169.     _expSetup_sub( obj, maxibuf, nistack, istksize );
  170.  
  171.     mnu = MNU_open( DLGPOS_MOS_SET_HOME, DLGPOS_MOS_SET_HOME, MNUATT_EXIT, obj, "設定" );
  172.     while ( 1 )
  173.     {    ret = MNU_start ( mnu );
  174.         if ( ret < 0 || ret == 9 )
  175.             break;
  176.         switch ( ret )
  177.         {    case    1:    maxibuf  = _expSetup_maxibuf ( maxibuf  );    break;
  178.             case    2:    nistack  = _expSetup_nistack ( nistack  );    break;
  179.             case    3:    istksize = _expSetup_istksize( istksize );    break;
  180.             case    4:    maxibuf = 64;    nistack = 4;    istksize = 2;    break;
  181.             case    5:    maxibuf = 64;    nistack = 6;    istksize = 2;    break;
  182.             case    6:    maxibuf = 64;    nistack = 7;    istksize = 2;    break;
  183.             case    7:    maxibuf = 64;    nistack = 8;    istksize = 2;    break;
  184.             case    8:    maxibuf = 64;    nistack = 8;    istksize = 4;    break;
  185.         }
  186.         _expSetup_sub( obj, maxibuf, nistack, istksize );
  187.     }
  188.     MNU_close(mnu);
  189.     MNU_free(obj);
  190.     if ( ret < 0 )
  191.     {    DLG_msgClose(dlg);
  192.         return (1);
  193.     }
  194.     DLG_msgPrintf(dlg,"\r\n" );
  195.     DLG_msgPrintf(dlg,"\tNew -maxibuf \t%d\tOld %d\r\n" , maxibuf , old_maxibuf  );
  196.     DLG_msgPrintf(dlg,"\tNew -nistack \t%d\tOld %d\r\n" , nistack , old_nistack  );
  197.     DLG_msgPrintf(dlg,"\tNew -istksize\t%d\tOld %d\r\n" , istksize, old_istksize );
  198.  
  199.     sum = chk_sum;
  200.     sum = (sum + (maxibuf  - old_maxibuf )) & 0xFFFF;
  201.     sum = (sum + (nistack  - old_nistack )) & 0xFFFF;
  202.     sum = (sum + (istksize - old_istksize)) & 0xFFFF;
  203.     DLG_msgPrintf(dlg,"\tNew check sum\t%$%04X\tOld $%04X\r\n", sum, chk_sum );
  204.  
  205.     ret = MNU_sure ( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN, 
  206.         C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT,
  207.         "    この設定に変更します。  " );
  208.     if ( ret != MENU_SURE_OK )
  209.     {    DLG_msgClose(dlg);
  210.         return (ERR);
  211.     }
  212.  
  213.     if ( (fp = FM_fopen(fn,"r+b")) == NULL )
  214.     {
  215.         DLG_tmpMsgTime( DLGPOS_MOS_SET_CENTER, DLGPOS_MOS_SET_CENTER,
  216.             C_MBLACK, C_DLGBASE, COLMIX(C_ERROR,C_GRAY),
  217.             AplErrMsgTime, " %s : \n    FILE OPEN ERROR!!    ", fn );
  218.         DLG_msgClose(dlg);
  219.         return (1);
  220.     }
  221.  
  222.     /* -maxibuf */
  223.     ofs = dx_ofs + 0x08;
  224.     fseek(fp,ofs,SEEK_SET);
  225.     fwrite( &maxibuf, 2, 1, fp );
  226.  
  227.     /* -nistack */
  228.     ofs = dx_ofs + 0x0A;
  229.     fseek(fp,ofs,SEEK_SET);
  230.     fwrite( &nistack, 2, 1, fp );
  231.  
  232.     /* -istksize */
  233.     ofs = dx_ofs + 0x0C;
  234.     fseek(fp,ofs,SEEK_SET);
  235.     fwrite( &istksize, 2, 1, fp );
  236.  
  237.     /* チェックサム */
  238.     ofs = 0x0A;
  239.     fseek(fp,ofs,SEEK_SET);
  240.     fwrite( &sum, 2, 1, fp );
  241.     FM_fclose(fp);
  242.     DLG_msgPrintf(dlg,"\r\n***** Completed *****\r" );
  243.  
  244.     DLG_tmpMsgTime( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
  245.         C_MBLACK, C_DLGBASE, COLMIX(C_TIMEBOX,C_GRAY),
  246.         4, " %s : \n    プログラムを書き換えました。    \n    再起動してください。  ", fn );
  247.  
  248.     DLG_msgClose(dlg);
  249.     return (0);
  250. }
  251.